<template>
  <div class="addEdit-block">
    <el-form
      ref="ruleForm"
      :model="ruleForm"
      :rules="rules"
      :style="{ backgroundColor: addEditForm.addEditBoxColor }"
      class="detail-form-content"
      label-width="80px"
    >
      <el-row>
        <el-col :span="12">
          <el-form-item
            v-if="type != 'info'"
            class="input"
            label="用户名"
            prop="username"
          >
            <el-input
              v-model="ruleForm.username"
              clearable
              placeholder="用户名"
              readonly
            ></el-input>
          </el-form-item>
          <div v-else>
            <el-form-item class="input" label="用户名" prop="username">
              <el-input
                v-model="ruleForm.username"
                placeholder="用户名"
                readonly
              ></el-input>
            </el-form-item>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <el-form-item
            v-if="type != 'info'"
            class="textarea"
            label="留言内容"
            prop="content"
          >
            <el-input
              v-model="ruleForm.content"
              :rows="8"
              placeholder="留言内容"
              readonly
              style="min-width: 200px; max-width: 600px"
              type="textarea"
            >
            </el-input>
          </el-form-item>
          <div v-else>
            <el-form-item
              v-if="ruleForm.content"
              label="留言内容"
              prop="content"
            >
              <span>{{ ruleForm.content }}</span>
            </el-form-item>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <el-form-item
            v-if="type != 'info'"
            class="textarea"
            label="回复内容"
            prop="reply"
          >
            <el-input
              v-model="ruleForm.reply"
              :rows="8"
              placeholder="回复内容"
              style="min-width: 200px; max-width: 600px"
              type="textarea"
            >
            </el-input>
          </el-form-item>
          <div v-else>
            <el-form-item v-if="ruleForm.reply" label="回复内容" prop="reply">
              <span>{{ ruleForm.reply }}</span>
            </el-form-item>
          </div>
        </el-col>
      </el-row>
      <el-form-item class="btn">
        <el-button
          v-if="type != 'info'"
          class="btn-success"
          type="primary"
          @click="onSubmit"
          >提交</el-button
        >
        <el-button v-if="type != 'info'" class="btn-close" @click="back()"
          >取消</el-button
        >
        <el-button v-if="type == 'info'" class="btn-close" @click="back()"
          >返回</el-button
        >
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
// 数字，邮件，手机，url，身份证校验
import {
  checkIdCard,
  isEmail,
  isIntNumer,
  isMobile,
  isNumber,
  isPhone,
  isURL,
} from "@/utils/validate"

export default {
  data() {
    let self = this
    var validateIdCard = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!checkIdCard(value)) {
        callback(new Error("请输入正确的身份证号码"))
      } else {
        callback()
      }
    }
    var validateUrl = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isURL(value)) {
        callback(new Error("请输入正确的URL地址"))
      } else {
        callback()
      }
    }
    var validateMobile = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isMobile(value)) {
        callback(new Error("请输入正确的手机号码"))
      } else {
        callback()
      }
    }
    var validatePhone = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isPhone(value)) {
        callback(new Error("请输入正确的电话号码"))
      } else {
        callback()
      }
    }
    var validateEmail = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isEmail(value)) {
        callback(new Error("请输入正确的邮箱地址"))
      } else {
        callback()
      }
    }
    var validateNumber = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isNumber(value)) {
        callback(new Error("请输入数字"))
      } else {
        callback()
      }
    }
    var validateIntNumber = (rule, value, callback) => {
      if (!value) {
        callback()
      } else if (!isIntNumer(value)) {
        callback(new Error("请输入整数"))
      } else {
        callback()
      }
    }
    return {
      addEditForm: {
        btnSaveFontColor: "#fff",
        selectFontSize: "14px",
        btnCancelBorderColor: "#DCDFE6",
        inputBorderRadius: "4px",
        inputFontSize: "14px",
        textareaBgColor: "#fff",
        btnSaveFontSize: "14px",
        textareaBorderRadius: "4px",
        uploadBgColor: "#fff",
        textareaBorderStyle: "solid",
        btnCancelWidth: "88px",
        textareaHeight: "120px",
        dateBgColor: "#fff",
        btnSaveBorderRadius: "4px",
        uploadLableFontSize: "14px",
        textareaBorderWidth: "1px",
        inputLableColor: "rgba(131, 138, 182, 1)",
        addEditBoxColor: "#fff",
        dateIconFontSize: "14px",
        btnSaveBgColor: "rgba(84, 88, 179, 1)",
        uploadIconFontColor: "#8c939d",
        textareaBorderColor: "rgba(236, 236, 255, 1)",
        btnCancelBgColor: "rgba(255, 255, 255, 1)",
        selectLableColor: "rgba(131, 138, 182, 1)",
        btnSaveBorderStyle: "solid",
        dateBorderWidth: "1px",
        dateLableFontSize: "14px",
        dateBorderRadius: "4px",
        btnCancelBorderStyle: "solid",
        selectLableFontSize: "14px",
        selectBorderStyle: "solid",
        selectIconFontColor: "rgba(236, 236, 255, 1)",
        btnCancelHeight: "44px",
        inputHeight: "38px",
        btnCancelFontColor: "rgba(0, 0, 0, 1)",
        dateBorderColor: "rgba(236, 236, 255, 1)",
        dateIconFontColor: "rgba(0, 0, 0, 1)",
        uploadBorderStyle: "dashed",
        dateBorderStyle: "solid",
        dateLableColor: "rgba(131, 138, 182, 1)",
        dateFontSize: "14px",
        inputBorderWidth: "1px",
        uploadIconFontSize: "28px",
        selectHeight: "38px",
        inputFontColor: "rgba(119, 122, 178, 1)",
        uploadHeight: "148px",
        textareaLableColor: "rgba(131, 138, 182, 1)",
        textareaLableFontSize: "14px",
        btnCancelFontSize: "14px",
        inputBorderStyle: "solid",
        btnCancelBorderRadius: "4px",
        inputBgColor: "rgba(255, 255, 255, 1)",
        inputLableFontSize: "14px",
        uploadLableColor: "rgba(131, 138, 182, 1)",
        uploadBorderRadius: "4px",
        btnSaveHeight: "44px",
        selectBgColor: "#fff",
        btnSaveWidth: "88px",
        selectIconFontSize: "14px",
        dateHeight: "38px",
        selectBorderColor: "rgba(236, 236, 255, 1)",
        inputBorderColor: "rgba(236, 236, 255, 1)",
        uploadBorderColor: "rgba(236, 236, 255, 1)",
        textareaFontColor: "rgba(119, 122, 178, 1)",
        selectBorderWidth: "1px",
        dateFontColor: "rgba(119, 122, 178, 1)",
        btnCancelBorderWidth: "0px",
        uploadBorderWidth: "2px",
        textareaFontSize: "14px",
        selectBorderRadius: "4px",
        selectFontColor: "rgba(119, 122, 178, 1)",
        btnSaveBorderColor: "#409EFF",
        btnSaveBorderWidth: "0px",
      },
      id: "",
      type: "",
      ro: {
        userid: false,
        username: false,
        content: false,
        reply: false,
      },
      ruleForm: {
        userid: "",
        username: "",
        content: "",
        reply: "",
      },
      rules: {
        userid: [
          { required: true, message: "留言人id不能为空", trigger: "blur" },
        ],
        username: [],
        content: [
          { required: true, message: "留言内容不能为空", trigger: "blur" },
        ],
        reply: [],
      },
    }
  },
  props: ["parent"],
  computed: {},
  created() {
    this.addEditStyleChange()
    this.addEditUploadStyleChange()
  },
  methods: {
    // 下载
    download(file) {
      window.open(`${file}`)
    },
    // 初始化
    init(id, type) {
      if (id) {
        this.id = id
        this.type = type
      }
      if (this.type == "info" || this.type == "else") {
        this.info(id)
      } else if (this.type == "cross") {
        var obj = this.$storage.getObj("crossObj")
        for (var o in obj) {
          if (o == "userid") {
            this.ruleForm.userid = obj[o]
            this.ro.userid = true
            continue
          }
          if (o == "username") {
            this.ruleForm.username = obj[o]
            this.ro.username = true
            continue
          }
          if (o == "content") {
            this.ruleForm.content = obj[o]
            this.ro.content = true
            continue
          }
          if (o == "reply") {
            this.ruleForm.reply = obj[o]
            this.ro.reply = true
          }
        }
      }
    },
    // 多级联动参数
    info(id) {
      this.$http({
        url: `messages/info/${id}`,
        method: "get",
      }).then(({ data }) => {
        if (data && data.code === 0) {
          this.ruleForm = data.data
          //解决前台上传图片后台不显示的问题
          let reg = new RegExp("../../../upload", "g") //g代表全部
        } else {
          this.$message.error(data.msg)
        }
      })
    },
    // 提交
    onSubmit() {
      // ${column.compare}
      // ${column.compare}
      // ${column.compare}
      // ${column.compare}
      this.$refs["ruleForm"].validate((valid) => {
        if (valid) {
          this.$http({
            url: `messages/${!this.ruleForm.id ? "save" : "update"}`,
            method: "post",
            data: this.ruleForm,
          }).then(({ data }) => {
            if (data && data.code === 0) {
              this.$message({
                message: "操作成功",
                type: "success",
                duration: 1500,
                onClose: () => {
                  this.parent.showFlag = true
                  this.parent.addOrUpdateFlag = false
                  this.parent.messagesCrossAddOrUpdateFlag = false
                  this.parent.search()
                  this.parent.contentStyleChange()
                },
              })
            } else {
              this.$message.error(data.msg)
            }
          })
        }
      })
    },
    // 获取uuid
    getUUID() {
      return new Date().getTime()
    },
    // 返回
    back() {
      this.parent.showFlag = true
      this.parent.addOrUpdateFlag = false
      this.parent.messagesCrossAddOrUpdateFlag = false
      this.parent.contentStyleChange()
    },
    addEditStyleChange() {
      this.$nextTick(() => {
        // input
        document
          .querySelectorAll(".addEdit-block .input .el-input__inner")
          .forEach((el) => {
            el.style.height = this.addEditForm.inputHeight
            el.style.color = this.addEditForm.inputFontColor
            el.style.fontSize = this.addEditForm.inputFontSize
            el.style.borderWidth = this.addEditForm.inputBorderWidth
            el.style.borderStyle = this.addEditForm.inputBorderStyle
            el.style.borderColor = this.addEditForm.inputBorderColor
            el.style.borderRadius = this.addEditForm.inputBorderRadius
            el.style.backgroundColor = this.addEditForm.inputBgColor
          })
        document
          .querySelectorAll(".addEdit-block .input .el-form-item__label")
          .forEach((el) => {
            el.style.lineHeight = this.addEditForm.inputHeight
            el.style.color = this.addEditForm.inputLableColor
            el.style.fontSize = this.addEditForm.inputLableFontSize
          })
        // select
        document
          .querySelectorAll(".addEdit-block .select .el-input__inner")
          .forEach((el) => {
            el.style.height = this.addEditForm.selectHeight
            el.style.color = this.addEditForm.selectFontColor
            el.style.fontSize = this.addEditForm.selectFontSize
            el.style.borderWidth = this.addEditForm.selectBorderWidth
            el.style.borderStyle = this.addEditForm.selectBorderStyle
            el.style.borderColor = this.addEditForm.selectBorderColor
            el.style.borderRadius = this.addEditForm.selectBorderRadius
            el.style.backgroundColor = this.addEditForm.selectBgColor
          })
        document
          .querySelectorAll(".addEdit-block .select .el-form-item__label")
          .forEach((el) => {
            el.style.lineHeight = this.addEditForm.selectHeight
            el.style.color = this.addEditForm.selectLableColor
            el.style.fontSize = this.addEditForm.selectLableFontSize
          })
        document
          .querySelectorAll(".addEdit-block .select .el-select__caret")
          .forEach((el) => {
            el.style.color = this.addEditForm.selectIconFontColor
            el.style.fontSize = this.addEditForm.selectIconFontSize
          })
        // date
        document
          .querySelectorAll(".addEdit-block .date .el-input__inner")
          .forEach((el) => {
            el.style.height = this.addEditForm.dateHeight
            el.style.color = this.addEditForm.dateFontColor
            el.style.fontSize = this.addEditForm.dateFontSize
            el.style.borderWidth = this.addEditForm.dateBorderWidth
            el.style.borderStyle = this.addEditForm.dateBorderStyle
            el.style.borderColor = this.addEditForm.dateBorderColor
            el.style.borderRadius = this.addEditForm.dateBorderRadius
            el.style.backgroundColor = this.addEditForm.dateBgColor
          })
        document
          .querySelectorAll(".addEdit-block .date .el-form-item__label")
          .forEach((el) => {
            el.style.lineHeight = this.addEditForm.dateHeight
            el.style.color = this.addEditForm.dateLableColor
            el.style.fontSize = this.addEditForm.dateLableFontSize
          })
        document
          .querySelectorAll(".addEdit-block .date .el-input__icon")
          .forEach((el) => {
            el.style.color = this.addEditForm.dateIconFontColor
            el.style.fontSize = this.addEditForm.dateIconFontSize
            el.style.lineHeight = this.addEditForm.dateHeight
          })
        // upload
        let iconLineHeight =
          parseInt(this.addEditForm.uploadHeight) -
          parseInt(this.addEditForm.uploadBorderWidth) * 2 +
          "px"
        document
          .querySelectorAll(".addEdit-block .upload .el-upload--picture-card")
          .forEach((el) => {
            el.style.width = this.addEditForm.uploadHeight
            el.style.height = this.addEditForm.uploadHeight
            el.style.borderWidth = this.addEditForm.uploadBorderWidth
            el.style.borderStyle = this.addEditForm.uploadBorderStyle
            el.style.borderColor = this.addEditForm.uploadBorderColor
            el.style.borderRadius = this.addEditForm.uploadBorderRadius
            el.style.backgroundColor = this.addEditForm.uploadBgColor
          })
        document
          .querySelectorAll(".addEdit-block .upload .el-form-item__label")
          .forEach((el) => {
            el.style.lineHeight = this.addEditForm.uploadHeight
            el.style.color = this.addEditForm.uploadLableColor
            el.style.fontSize = this.addEditForm.uploadLableFontSize
          })
        document
          .querySelectorAll(".addEdit-block .upload .el-icon-plus")
          .forEach((el) => {
            el.style.color = this.addEditForm.uploadIconFontColor
            el.style.fontSize = this.addEditForm.uploadIconFontSize
            el.style.lineHeight = iconLineHeight
            el.style.display = "block"
          })
        // 多文本输入框
        document
          .querySelectorAll(".addEdit-block .textarea .el-textarea__inner")
          .forEach((el) => {
            el.style.height = this.addEditForm.textareaHeight
            el.style.color = this.addEditForm.textareaFontColor
            el.style.fontSize = this.addEditForm.textareaFontSize
            el.style.borderWidth = this.addEditForm.textareaBorderWidth
            el.style.borderStyle = this.addEditForm.textareaBorderStyle
            el.style.borderColor = this.addEditForm.textareaBorderColor
            el.style.borderRadius = this.addEditForm.textareaBorderRadius
            el.style.backgroundColor = this.addEditForm.textareaBgColor
          })
        document
          .querySelectorAll(".addEdit-block .textarea .el-form-item__label")
          .forEach((el) => {
            // el.style.lineHeight = this.addEditForm.textareaHeight
            el.style.color = this.addEditForm.textareaLableColor
            el.style.fontSize = this.addEditForm.textareaLableFontSize
          })
        // 保存
        document
          .querySelectorAll(".addEdit-block .btn .btn-success")
          .forEach((el) => {
            el.style.width = this.addEditForm.btnSaveWidth
            el.style.height = this.addEditForm.btnSaveHeight
            el.style.color = this.addEditForm.btnSaveFontColor
            el.style.fontSize = this.addEditForm.btnSaveFontSize
            el.style.borderWidth = this.addEditForm.btnSaveBorderWidth
            el.style.borderStyle = this.addEditForm.btnSaveBorderStyle
            el.style.borderColor = this.addEditForm.btnSaveBorderColor
            el.style.borderRadius = this.addEditForm.btnSaveBorderRadius
            el.style.backgroundColor = this.addEditForm.btnSaveBgColor
          })
        // 返回
        document
          .querySelectorAll(".addEdit-block .btn .btn-close")
          .forEach((el) => {
            el.style.width = this.addEditForm.btnCancelWidth
            el.style.height = this.addEditForm.btnCancelHeight
            el.style.color = this.addEditForm.btnCancelFontColor
            el.style.fontSize = this.addEditForm.btnCancelFontSize
            el.style.borderWidth = this.addEditForm.btnCancelBorderWidth
            el.style.borderStyle = this.addEditForm.btnCancelBorderStyle
            el.style.borderColor = this.addEditForm.btnCancelBorderColor
            el.style.borderRadius = this.addEditForm.btnCancelBorderRadius
            el.style.backgroundColor = this.addEditForm.btnCancelBgColor
          })
      })
    },
    addEditUploadStyleChange() {
      this.$nextTick(() => {
        document
          .querySelectorAll(
            ".addEdit-block .upload .el-upload-list--picture-card .el-upload-list__item"
          )
          .forEach((el) => {
            el.style.width = this.addEditForm.uploadHeight
            el.style.height = this.addEditForm.uploadHeight
            el.style.borderWidth = this.addEditForm.uploadBorderWidth
            el.style.borderStyle = this.addEditForm.uploadBorderStyle
            el.style.borderColor = this.addEditForm.uploadBorderColor
            el.style.borderRadius = this.addEditForm.uploadBorderRadius
            el.style.backgroundColor = this.addEditForm.uploadBgColor
          })
      })
    },
  },
}
</script>
<style lang="scss">
.editor {
  height: 500px;

  & ::v-deep .ql-container {
    height: 310px;
  }
}

.amap-wrapper {
  width: 100%;
  height: 500px;
}

.search-box {
  position: absolute;
}

.addEdit-block {
  margin: -10px;
}

.detail-form-content {
  padding: 12px;
}

.btn .el-button {
  padding: 0;
}
</style>
